package model;

import java.sql.SQLException;
import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;

public class KimchiDao {
	private SqlMapClient sqlMapClient;
	public void setSqlMapClient(SqlMapClient sqlMapClient){
		this.sqlMapClient=sqlMapClient;
		
	}
	
	/**
	 * 다음 작업지시번호 받아오기
	 */
	public int getWorkorderNo() throws SQLException {
		return (int) sqlMapClient.queryForObject("getWorkorderNo");
	}

	/**
	 * 재고현황보기
	 */
	public List<InventoryVO> getInventoryList() throws SQLException {
		return sqlMapClient.queryForList("getInventoryList");
	}
	
	/**
	 * 재료 입고
	 */
	public void insertInventory(InventoryVO ivo) throws SQLException {
		sqlMapClient.insert("insertInventory", ivo);
	}

	/**
	 * 작업요청현황보기
	 */
	public WorkOrderVO getWorkOrder(int workorder) throws SQLException {
		return (WorkOrderVO) sqlMapClient.queryForObject("getWorkOrder", workorder);
	}

	/**
	 * 작업요청
	 */
	public void workOrder(WorkOrderVO wvo) throws SQLException {
		sqlMapClient.insert("workOrder", wvo);
	}

	/**
	 * 재료번호 가져오기 
	 */
	public int getInventoryNo(String station) throws SQLException {
		return (int) sqlMapClient.queryForObject("getInventoryNo", station);
	}
	
	/**
	 * 재고 빼기
	 */
	public void decreaseInventory(int inventory_no) throws SQLException {
		sqlMapClient.update("decreaseInventory", inventory_no);
	}

	/**
	 * 물품 가공 시작
	 */
	public int insertProduct(HashMap map) throws SQLException {
		return (int) sqlMapClient.insert("insertProduct", map);
	}

	/**
	 * 대기중인 물품 가져오기
	 */
	public int getProductNo(String station) throws SQLException {
		return (int) sqlMapClient.queryForObject("getProductNo", station);
	}

	/**
	 * 공정하기
	 */
	public void updateProduct(HashMap map) throws SQLException {
		sqlMapClient.update("updateProduct",map);
	}
	
	/**
	 * 히스토리 찍기
	 */
	public void writeHistory(HashMap map) throws SQLException {
		sqlMapClient.insert("writeHistory", map);
	}

	/**
	 * 다음작업 찾기
	 */
	public String getNextStep(HashMap map) throws SQLException {
		return (String) sqlMapClient.queryForObject("getNextStep", map);
	}

	/**
	 * 제품 완료하면 완료 컬럼 추가
	 */
	public void completeProduct(int workorder_no) throws SQLException {
		sqlMapClient.update("completeProduct", workorder_no);
	}
	
	/**
	 * 각 공정 대기 수량
	 */
	public int getStationWait(String station) throws SQLException {
		return (int) sqlMapClient.queryForObject("getStationWait", station);
	}
	
	/**
	 * workorder별 각 공정 완료 수량
	 */
	public int getStationComplete(HashMap map) throws SQLException {
		return (int) sqlMapClient.queryForObject("getStationComplete", map);
	}

	/**
	 * 각 공정 불량 수량
	 */
	public int getStationError(String station_name) throws SQLException {
		return (int) sqlMapClient.queryForObject("getStationError", station_name);
	}
	
	/**
	 * 각 공정 대기 리스트
	 */
	public List<ProductVO> getStationProductList(String station_name) throws SQLException {
		return sqlMapClient.queryForList("getStationProductList", station_name);
	}
	/**
	 * workorder최대번호
	 */
	public int getMaxWorkOrderNo() throws SQLException {
		return (int) sqlMapClient.queryForObject("getMaxWorkOrderNo");
	}

	/**
	 * 각 공정 불량수량 리스트
	 */
	public List<ErrorVO> getStationErrorList(String station_name) throws SQLException {
		return sqlMapClient.queryForList("getStationErrorList", station_name);
	}
	/**
	 * 일일 불량 누적 차트 관련 메서드
	 */
	public ArrayList<ChartVO> cumulativeFailureCharts(ChartVO cvo) throws SQLException {
		return (ArrayList<ChartVO>) sqlMapClient.queryForList("cumulativeFailureCharts",cvo);
	}
	/**
	 * 불량 세부 차트 관련
	 */
	public ArrayList<BadDetailChartVO> badDetailChart() throws SQLException {
		return (ArrayList<BadDetailChartVO>) sqlMapClient.queryForList("badDetailChart");
	}
	/**
	 * 주간 작업량
	 */
	public ArrayList<ChartVO> workWeek(ChartVO cvo) throws SQLException {
		return (ArrayList<ChartVO>) sqlMapClient.queryForList("workWeek",cvo);
	}

	/**
	 * 가동현황
	 */
	public List<OperationInfoVO> operationInfo(int workorder_no) throws SQLException {
		return sqlMapClient.queryForList("operationInfo", workorder_no);
	}
	
	/**
	 * 불량난 제품들 찾기
	 */
	public List<ErrorInfoVO> getErrorProduct() throws SQLException {
		return sqlMapClient.queryForList("getErrorProduct");
	}
	
	/**
	 * 불량종류의 재료 찾기
	 */
	public String getErrorMaterial(String condition_name) throws SQLException {
		return (String)sqlMapClient.queryForObject("getErrorMaterial", condition_name);
	}
	
	/**
	 * 제품의 사용된 물건 정보
	 */
	public ErrorInfoVO getErrorInfo(ErrorInfoVO vo) throws SQLException {
		return (ErrorInfoVO) sqlMapClient.queryForObject("getErrorInfo", vo);
	}
}
